Environment mapping is used to model interobject reflections that occur when a surface of an object reflects other objects in its surrounding environment. There are two types of environment maps that are typically used, a cube environment map and a sphere environment map.
A cube environment map has six texture images that correspond to the six is faces of a cube. The center of the cube is referred to as the center of projection. At each vertex of an object (polygon) to be environment mapped, a reflection vector is computed. This reflection vector indexes one of the six texture images that make up the cube environment map. If all the vertices of the object generate reflections that point to a single texture image of the cube environment map, that texture image can be mapped onto the object using projective texturing. If an object has reflections that point to more than one texture image of the cube environment map, the object is subdivided into pieces, each of which generates reflection vectors that point to only one texture image. Because a reflection vector is not computed at each pixel, this method is not exact. Furthermore, the need to subdivide objects that generate reflection vectors that point to more than one texture image of a cube environment map precludes general environment mapping from being implemented using graphics hardware.
A sphere map on the other hand has only a single texture image. This texture image comprises a circle representing the hemisphere of the environment behind a viewer, surrounded by an annulus representing the hemisphere in front of the viewer. The texture image is that of a perfectly reflecting sphere located in the environment when the viewer is infinitely far from the sphere. At each object (plygon) vertex, a texture coordinate generation function generates coordinates that index this texture image, and these are interpolated across the object. A problem with using a sphere environment map, as compared to using a cube environment map, is that the entire sphere environment map must be undated each time the viewpoint of a computer scene changes. When using a cube environment map, only certain faces of the cube must be updated as the viewpoint changes, thus significantly reducing the time needed to update the cube environment map between each computer scene. The need to update an entire sphere environment map each time the viewpoint is changed can cause significant performance issues in computer gaming applications where the viewpoint is rapidly changing.
What is needed are new general environment mapping techniques that overcome the disadvantages and limitations described above.